package com.linxuan.reggie.utils;

import java.util.Random;

/**
 * 随机生成验证码工具类
 */
public class ValidateCodeUtils {

    /**
     * 随机生成4/6位数字验证码
     *
     * @param length 长度为4位或者6位
     * @return 返回值为生成的4/6位数字验证码
     */
    public static Integer generateValidateCode(int length) {
        Integer code = null;
        // 如果length是4/6，那么就生成4/6位验证码
        if (length == 4) {
            // 生成随机数，最大为9999
            code = new Random().nextInt(9999);
            if (code < 1000) {
                // 保证随机数为4位数字
                code = code + 1000;
            }
        } else if (length == 6) {
            // 生成随机数，最大为999999
            code = new Random().nextInt(999999);
            if (code < 100000) {
                // 保证随机数为6位数字
                code = code + 100000;
            }
        } else {
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code;
    }

    /**
     * 随机生成指定长度字符串验证码
     * 假设length为4，如果不加限制直接随机生成一个整数，这个数可能在0~4095中间，
     * 这样转为十六进制的字符串类型没有四位，切割的时候会抛出异常，这里不做处理，可能性还是比较小的
     * @param length 长度
     * @return 返回length长度的字符串验证码，格式为数字或者英文a~f字母
     */
    public static String generateValidateCode4String(int length) {
        Random rdm = new Random();
        // 返回整数参数的十六进制的字符串表示形式
        String hash1 = Integer.toHexString(rdm.nextInt());
        // 进行切割并返回，如果字符串长度小于length可能抛异常，可能性较小，这里不做考虑
        return hash1.substring(0, length);
    }
}
